6.2.8 过滤 docker image ls
的输出内容
Docker提供 --filter
参数来过滤 docker image ls
命令返回的镜像列表内容。
下面的示例只会返回悬虚(dangling)镜像。
$ docker image ls --filter dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 4fd34165afe0 7 days ago 14.5MB
那些没有标签的镜像被称为悬虚镜像,在列表中展示为 <none>:<none>
。通常出现这种情况,是因为构建了一个新镜像,然后为该镜像打了一个已经存在的标签。当此情况出现,Docker会构建新的镜像,然后发现已经有镜像包含相同的标签,接着Docker会移除旧镜像上面的标签,将该标签标在新的镜像之上。例如,首先基于 alpine:3.4
构建一个新的镜像,并打上 dodge:challenger
标签。然后更新Dockerfile,将 alpine:3.4
替换为 alpine:3.5
,并且再次执行 docker image build
命令。该命令会构建一个新的镜像,并且标签为 dodge:challenger
,同时移除了旧镜像上面对应的标签,旧镜像就变成了悬虚镜像。
可以通过 docker image prune
命令移除全部的悬虚镜像。如果添加了 -a
参数,Docker会额外移除没有被使用的镜像(那些没有被任何容器使用的镜像)。
Docker目前支持如下的过滤器。
dangling
:可以指定true
或者false
,仅返回悬虚镜像(true),或者非悬虚镜像(false)。before
:需要镜像名称或者ID作为参数,返回在之前被创建的全部镜像。since
:与before
类似,不过返回的是指定镜像之后创建的全部镜像。label
:根据标注(label)的名称或者值,对镜像进行过滤。docker image ls
命令输出中不显示标注内容。
其他的过滤方式可以使用 reference
。
下面就是使用 reference
完成过滤并且仅显示标签为 latest
的示例。
$ docker image ls --filter=reference="*:latest"
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 3fd9065eaf02 8 days ago 4.15MB
test latest 8426e7efb777 3 days ago 122MB
读者也可以使用 --format
参数来通过Go模板对输出内容进行格式化。例如,下面的指令将只返回Docker主机上镜像的大小属性。
$ docker image ls --format "{{.Size}}"
99.3MB
111MB
82.6MB
88.8MB
4.15MB
108MB
使用下面命令返回全部镜像,但是只显示仓库、标签和大小信息。
$ docker image ls --format "{{.Repository}}: {{.Tag}}: {{.Size}}"
dodge: challenger: 99.3MB
ubuntu: latest: 111MB
python: 3.4-alpine: 82.6MB
python: 3.5-alpine: 88.8MB
alpine: latest: 4.15MB
nginx: latest: 108MB
如果读者需要更复杂的过滤,可以使用OS或者Shell自带的工具,比如 Grep
或者 AWK
。